#include "app.h"

void app_init(void)
{
	uint8_t error_code;

	DELAY_MS(300);						//等待系统稳定，否则操作EEPROM或flash有风险
	CLEAR_WDT();						//喂狗 2S
	//初始化硬件，正常情况下打开全局中断开关，否则，除了输出短路开机，其他错误出现系统将无法正常工作(不会打开全局中断)
	error_code = Hardware_Init();		
	CLEAR_WDT();
	if (error_code == 0)				//系统初始化正常	
	{		
		//电池电压大于21V，可以开机
		if (flag_read(&(gst_battery.BATTERY_FLAG_VOLTAGE_LOW), ACTION_BATOFF) == CLEAR)		
		{
			Soft_Start();
		}
	}
	else								//初始化异常是打印异常状态信息
	{
		uint8_t info_strings[40] = "System Init Error, Error Code: ";
		info_strings[31] = error_code + '0';	//转化为ASCII码
		info_strings[32] = '\n';
		
		if (error_code != 3)			//全局中断没有打开，循环发送方式发送，等待看门狗复位
		{
			Uart_Host_Loop_Write(info_strings, sizeof(info_strings));
		}
		else							//中断开启，中断方式发送，后续继续运行
		{
			Uart_Host_Write(info_strings, sizeof(info_strings));
		}
	}
	TimerBase_Set(0);					//设置从0开始计数
	TimerBase_Enable();					//使能时基定时器	
	CLEAR_WDT();						//喂狗
}

void app(void)
{	
	//以下check函数0.7S计算一次，每70ms检测一次，除check_battery_resistance()和Check_Battery_Lost()外
	
	//第1个10ms，最长耗时大约4ms
    Check_Tiger_State();
	Check_VOUT_Voltage();
	/************************/	
	//第2个10ms，最长耗时大约2ms
	Check_Battery_Voltage();
    Check_Bat_Middle_Dot_Voltage();
	Check_Charger_Current();
	/************************/	
	//第3个10ms
	Check_Load_Current();
	Check_Charger_Voltage();
	/************************/	
	//第4个10ms，最长耗时大约8ms
	Charging_Work();
	/************************/
	//第5个10ms
    Function_Action();
	/************************/
	//第6个10ms
	Check_Battery_Full();
	Check_Acpower_Voltage();	
	/************************/
	Check_Battery_Lost();
#if CHECK_BAT_RES_EN > 0
	Check_Battery_Resistance();
#endif
	Charger_Port_Short_Protect();
	AC_Down_Charger_Close();
	Response_Post_And_Send_Info();
	/************************/
	if (gu8_soft_wdg_clear_flag == 0xFF)				//软件看门狗, 约0.7S喂狗一次, 失效情况下2S硬件看门狗动作
	{
		gu8_soft_wdg_clear_flag = 0;
		CLEAR_WDT();
	}
	/************************/
    return;
}




